package com.github.ginirohikocha.dbm.application;

import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;
import com.github.ginirohikocha.dbm.util.HttpUtil;
import com.vondear.rxtool.RxTool;

import org.json.JSONException;

import java.util.Timer;
import java.util.TimerTask;

public class DBMApplication extends Application {

    private SharedPreferences sharedPreferences;

    private static LocationClient locationClient;

    @Override
    public void onCreate() {
        super.onCreate();
        sharedPreferences = getSharedPreferences("worker", 0);
        RxTool.init(getApplicationContext());
        initBiaduMap();
        initLocationService();
    }

    private void initBiaduMap() {
        //在使用SDK各组件之前初始化context信息，传入ApplicationContext
        SDKInitializer.initialize(this);
        //自4.3.0起，百度地图SDK所有接口均支持百度坐标和国测局坐标，用此方法设置您使用的坐标类型.
        //包括BD09LL和GCJ02两种坐标，默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL);
    }

    private void initLocationService() {
        initLocationOption(getApplicationContext());
    }

    /**
     * 初始化定位参数配置
     */
    public void initLocationOption(Context context) {
        //定位服务的客户端。宿主程序在客户端声明此类，并调用，目前只支持在主线程中启动
        locationClient = new LocationClient(context);
        //声明LocationClient类实例并配置定位参数
        LocationClientOption locationOption = new LocationClientOption();
        GeneralLocationListener generalLocationListener = new GeneralLocationListener();
        //注册监听函数
        locationClient.registerLocationListener(generalLocationListener);
        //可选，默认gcj02，设置返回的定位结果坐标系，如果配合百度地图使用，建议设置为bd09ll;
        locationOption.setCoorType("gcj02");
        //可选，默认0，即仅定位一次，设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
        locationOption.setScanSpan(1000*60);
        //可选，默认false，设置是否开启Gps定位
        locationOption.setOpenGps(true);

        //需将配置好的LocationClientOption对象，通过setLocOption方法传递给LocationClient对象使用
        locationClient.setLocOption(locationOption);
        locationClient.start();

        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                Log.d("定位", String.valueOf(locationClient.isStarted()));
                locationClient.restart();
            }
        }, 0, 1000*60);
    }

    /**
     * 实现定位回调
     */
    private class GeneralLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location){
            //此处的BDLocation为定位结果信息类，通过它的各种get方法可获取定位相关的全部结果
            //以下只列举部分获取经纬度相关（常用）的结果信息
            //更多结果信息获取说明，请参照类参考中BDLocation类中的说明

            //获取纬度信息
            double latitude = location.getLatitude();
            //获取经度信息
            double longitude = location.getLongitude();
            //获取定位精度，默认值为0.0f
            //float radius = location.getRadius();
            //获取经纬度坐标类型，以LocationClientOption中设置过的坐标类型为准
            //String coorType = location.getCoorType();
            //获取定位类型、定位错误返回码，具体信息可参照类参考中BDLocation类中的说明
            //int errorCode = location.getLocType();
            Log.d("定位服务", latitude+","+longitude);
            try {
                HttpUtil.updateLocation(sharedPreferences.getString("workerNum", null), latitude, longitude);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}
